﻿// Inner Fire 游戏引擎库
// UI - 按钮
//
// Copyright (c) 2024 by 尔西大帝. All rights reserved.
//
// 用于UI的组件-Button
//
// Author: 尔西大帝
// Email: 2670613871@qq.com
// Created: 2024-12-25

#include "button.h"
#include <enum_parser.h>

namespace ifire::ui {

Button::Button(ikit::sstr name_id, const ButtonInfo* info)
    : UIComponent(name_id), info_(info) {
  if (info->text.is_validate) {
    button_text_ = std::make_unique<Label>(ikit::sstr(), &info->text);
  }
  if (info->button.is_validate) {
    button_image_ = std::make_unique<Image>(ikit::sstr(), &info->button);
  }
  if (info->icon.is_validate) {
    icon_image_ = std::make_unique<Image>(ikit::sstr(), &info->icon);
  }
}

void Button::SetText(const char* text) { button_text_->SetText(text); }

void Button::SetIcon(const char* icon) {
  // TODO：这个涉及比较复杂的操作，暂时做不到，等会再实现。
}

void Button::SetScale(XMFLOAT2 scale) {
  UIComponent::SetScale(scale);
  layout_->SetScale(scale);
  SetRefresh();
}

void Button::SetRefresh() {
  layout_->SetRefresh();
  if (button_text_ != nullptr) {
    button_text_->SetRefresh();
  }
  if (button_image_ != nullptr) {
    button_image_->SetRefresh();
  }
  if (icon_image_ != nullptr) {
    icon_image_->SetRefresh();
  }
}

} // namespace ifire::ui